#pragma once
#include <string>
#include <vector>
#include <map>
#include <mutex>

class KeywordRecommend {
public:
    KeywordRecommend();
    ~KeywordRecommend() = default;
    
    // 初始化：加载词典和索引
    bool init(const std::string& cnDictPath, const std::string& cnIndexPath,
              const std::string& enDictPath, const std::string& enIndexPath);
    
    // 获取推荐 keywords
    std::vector<std::pair<std::string, int>> recommend(const std::string& keyword, int count = 5);
    
private:
    // 判断是否是中文
    bool isChinese(const std::string& str) const;
    
    // 判断是否是英文
    bool isEnglish(const std::string& str) const;
    
    // 拆分中文字符
    std::vector<std::string> splitChinese(const std::string& str) const;
    
    // 计算编辑距离
    int editDistance(const std::string& s1, const std::string& s2) const;
    
    // 加载中文词典
    bool loadCNDict(const std::string& path);
    
    // 加载中文索引
    bool loadCNIndex(const std::string& path);
    
    // 加载英文词典
    bool loadENDict(const std::string& path);
    
    // 加载英文索引
    bool loadENIndex(const std::string& path);
    
private:
    // 词典：词 -> 词频
    std::map<std::string, int> cnDict_;  // 中文词典
    std::map<std::string, int> enDict_;  // 英文词典
    
    // 索引：首字符 -> 词列表
    std::map<std::string, std::vector<std::string>> cnIndex_;  // 中文索引
    std::map<char, std::vector<std::string>> enIndex_;         // 英文索引
    
    mutable std::mutex mutex_;  // 保护数据访问的互斥锁
};
